package com.atguigu.rabbitmq.one;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消费者 接收消息的
 */
public class Consumer {

    // 队列名称
    public static final String QUEUE_NAME = "hello";

    // 接受消息
    public static void main(String[] args) {

        try {
            // 创建连接工厂
            ConnectionFactory factory = new ConnectionFactory();
            // 设置 ip
            factory.setHost("192.168.0.106");
            // 设置用户
            factory.setUsername("admin");
            // 设置密码
            factory.setPassword("123");

            // 创建一个连接
            Connection connection = factory.newConnection();

            // 创建连接 通道 channel
            Channel channel = connection.createChannel();

            /**
             * 消费者消费消息
             * 1. 消费那个队列
             * 2. 消费者消费成功之后是否要自动应答 true 代表的自动应答 false代表手动应答
             * 3. 消费者未成功消费的回调
             * 4. 消费者取消消费的回调
             */
            // 第三个参数创建 声明接受消息
            DeliverCallback deliverCallback = (consumerTag,message) -> {
                System.out.println(new String(message.getBody()));
            };
            // 第四个参数的创建 取消消息时的回调
            CancelCallback cancelCallback = consumerTag -> {
                System.out.println("消息消费被中断");
            };
            // 开始真正的消费了
            System.out.println("C1等待接受消息.......");
            channel.basicConsume( QUEUE_NAME,true,deliverCallback,cancelCallback);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }

    }
}
